// src/router/guard.js
import { verifyLogin } from "@/api/util";
import { useUserStore } from "@/store/user";
import { ElMessage } from "element-plus";

/**
 * 路由守卫配置
 * @param {Object} router - Vue Router实例
 */
export const setupRouterGuard = (router) => {
  // 全局前置守卫
  router.beforeEach(async (to, from, next) => {
    next();
    return;
    // 获取用户store实例
    const userStore = useUserStore();

    // 如果访问的是登录页，直接放行
    if (to.path === "/login") {
      // 清除可能存在的登录状态，确保用户必须主动登录
      userStore.logout();
      next();
      return;
    }

    // 根据环境决定是否从localStorage恢复用户数据
    // 只有开发环境才尝试从localStorage恢复用户数据
    if (import.meta.env.DEV) {
      // 尝试从localStorage恢复用户数据
      userStore.restoreUserData();
    }

    // 检查用户是否已登录（只有开发环境从localStorage恢复后才可能已登录）
    // if (userStore.isLogin) {
    //   next();
    //   return;
    // }

    // 如果本地没有登录信息，尝试验证服务器登录状态
    try {
      // 调用验证登录接口
      const loginInfo = await verifyLogin();

      // 如果验证成功且返回了用户数据
      if (loginInfo && loginInfo.code === 100 && loginInfo.data) {
        // 使用user store保存登录信息
        userStore.login(loginInfo);
        next();
        console.log("路由守卫登录成功:", loginInfo);
      } else {
        ElMessage.error("登录过期，请重新登录");
        // 验证失败，重定向到登录页
        userStore.logout();
        next("/login");
      }
    } catch (error) {
      console.error("路由守卫验证登录失败:", error);
      // 发生错误，重定向到登录页
      userStore.logout();
      next("/login");
    }
  });

  // 全局后置守卫
  router.afterEach((to, from) => {
    // 可以在这里记录页面访问日志等
    console.log(`从 ${from.path} 跳转到 ${to.path}`);
  });
};

/**
 * 检查用户是否已登录
 * @returns {Promise<boolean>} - 是否已登录
 */
export const checkLoginStatus = async () => {
  try {
    const loginInfo = await verifyLogin();
    return !!(loginInfo && loginInfo.code === 100 && loginInfo.data);
  } catch (error) {
    return false;
  }
};
